package com.wayhome.srpingbootmybatis.boc.dto;

import com.alibaba.fastjson.annotation.JSONField;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.wayhome.srpingbootmybatis.boc.consts.BocOnePayConst;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;


@ApiModel(value = "支付码支付消费（B 扫 C）")
public class BocPayReqDTO extends BocBaseFieldDTO {


    @ApiModelProperty(value = "支付方式", notes = "ZFBA-支付宝 WEIX-微信 UPAY-银联二维码(暂不支持) DZZF-电子支付 UN-未知")
    @JSONField(name="PayType")
    @JsonProperty("PayType")
    public String PayType;

    @ApiModelProperty(value = "支付授权码")
    @JSONField(name="AuthCode")
    @JsonProperty("AuthCode")
    public String AuthCode;

    @ApiModelProperty(value = "交易金额", notes = "金额以分为单位不包含小数，不足 12 位左补“0”:000000000001，代 表1分钱")
    @JSONField(name="TranAmt")
    @JsonProperty("TranAmt")
    public String TranAmt;

    @ApiModelProperty(value = "交易币种", notes = "固定填156")
    @JSONField(name="CcyCode")
    @JsonProperty("CcyCode")
    public String CcyCode = "156";

    @ApiModelProperty(value = "商户附言", notes = "仅微信支付宝交易有效，其他交易 传此信息无意义")
    @JSONField(name="Body")
    @JsonProperty("Body")
    public String Body;

    @ApiModelProperty(value = "子商户公众账号ID", notes = "微信分配的子商户公众账号ID")
    @JSONField(name="SubAppId")
    @JsonProperty("SubAppId")
    public String SubAppId;

    @ApiModelProperty(value = "支付有效时间", notes = "上送值超出限定时间范围，请以返 回为准，以分单， 默认 1 分钟， 最大 10 分钟 注:目前仅支持微信、支付宝、电 子支付上送此字段，其余交易均不支持。即使传入此字段也无作用。")
    @JSONField(name="PayValidTime")
    @JsonProperty("PayValidTime")
    public String PayValidTime;

    @ApiModelProperty(value = "子商户公众账号ID", notes = "终端设备类型，受理方可参考终端 注册时的设备类型填写，取值如 下:\n" +
            "01:自动柜员机(含 ATM 和 CDM) 和多媒体自助终端\n" +
            "02:传统 POS\n" +
            "03:mPOS\n" +
            "04:智能 POS\n" +
            "05:II 型固定电话 06:云闪付终端; 07:保留使用;\n" +
            "08:手机 POS; 09:刷脸付终端;\n" +
            "15\n" +
            "10:条码支付受理终端; 11:条码支付辅助受理终端; 12:行业终端(公交、地铁用于指 定行业的终端);\n" +
            "13:MIS 终端")
    @JSONField(name="DeviceType")
    @JsonProperty("DeviceType")
    public String DeviceType;

    @ApiModelProperty(value = "加密随机因子", notes = "在被扫支付类交易报文中出现: 若付款码为19位数字，则取后 6 位;若付款码码为EMV 二维码，则取其 tag57的卡号/token号的后6位")
    @JSONField(name="EncryptRandNum")
    @JsonProperty("EncryptRandNum")
    public String EncryptRandNum;

    @ApiModelProperty(value = "子商户公众账号ID", notes = "在被扫支付类交易报文中出现: 64bit的密文数据，对终端硬件序列号和加密随机因子加密后的结果。本子域取值为:64bit密文数据进行base64编码后的结果。")
    @JSONField(name="SecretText")
    @JsonProperty("SecretText")
    public String SecretText;

    @ApiModelProperty(value = "终端入网认证编号", notes = "银行卡受理终端产品应用认证编 号。该编号由“中国银联标识产品 企业资质认证办公室”为通过入网 认证的终端进行分配。银联直连终 端必填。格式:5 位字符，例如 P3100")
    @JSONField(name="NetworkLicense")
    @JsonProperty("NetworkLicense")
    public String NetworkLicense;




    public String getPayType() {
        return PayType;
    }

    public void setPayType(String payType) {
        PayType = payType;
    }

    public String getAuthCode() {
        return AuthCode;
    }

    public void setAuthCode(String authCode) {
        AuthCode = authCode;
    }

    public String getTranAmt() {
        return TranAmt;
    }

    public void setTranAmt(String tranAmt) {
        TranAmt = tranAmt;
    }

    public String getCcyCode() {
        return CcyCode;
    }

    public void setCcyCode(String ccyCode) {
        CcyCode = ccyCode;
    }

    public String getBody() {
        return Body;
    }

    public void setBody(String body) {
        Body = body;
    }

    public String getSubAppId() {
        return SubAppId;
    }

    public void setSubAppId(String subAppId) {
        SubAppId = subAppId;
    }

    public String getPayValidTime() {
        return PayValidTime;
    }

    public void setPayValidTime(String payValidTime) {
        PayValidTime = payValidTime;
    }

    public String getDeviceType() {
        return DeviceType;
    }

    public void setDeviceType(String deviceType) {
        DeviceType = deviceType;
    }

    public String getEncryptRandNum() {
        return EncryptRandNum;
    }

    public void setEncryptRandNum(String encryptRandNum) {
        EncryptRandNum = encryptRandNum;
    }

    public String getSecretText() {
        return SecretText;
    }

    public void setSecretText(String secretText) {
        SecretText = secretText;
    }

    public String getNetworkLicense() {
        return NetworkLicense;
    }

    public void setNetworkLicense(String networkLicense) {
        NetworkLicense = networkLicense;
    }
}
